package main

import (
	"fmt"
	"net/rpc"
	"net/rpc/jsonrpc"
)

//用于服务端在注册rpcd对象时候 能让编译器检测出注册对象是否合法

//创建接口 在接口中定义方法原型

type MyInterface interface {
	HelloWorld(string, *string) error
}

//调用方法时候，需要给i传参 ，参数应该是实现了helloWorld方法的类对象 new(结构体)
func RegisterService(i MyInterface) {

	rpc.RegisterName("hello", i)

}

//---------客户端使用
//像本地函数一样，调用远程函数

//定义类
type MyClient struct {
	c *rpc.Client
}

//初始化c
func InitClient(addr string) MyClient {

	conn, _ := jsonrpc.Dial("tcp", addr)

	return MyClient{c: conn}

}

//实现函数 参照上面interface 来实现
func (this *MyClient) HelloWorld(a string, b *string) error {
	//参数1 参照上面的interface RegisterNamee而来 a是传入参数 b是传出函数
	this.c.Call("hello.HelloWorld", a, b)
}
